package com.bailian.system.service.impl;

import java.util.List;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.bailian.system.mapper.BlMyFavoriteMapper;
import com.bailian.system.domain.BlMyFavorite;
import com.bailian.system.service.IBlMyFavoriteService;

/**
 * 我的收藏Service业务层处理
 * 
 * @author bailian
 * @date 2025-01-27
 */
@Service
public class BlMyFavoriteServiceImpl implements IBlMyFavoriteService 
{
    @Autowired
    private BlMyFavoriteMapper blMyFavoriteMapper;

    /**
     * 查询我的收藏
     * 
     * @param favoriteId 我的收藏主键
     * @return 我的收藏
     */
    @Override
    public BlMyFavorite selectBlMyFavoriteByFavoriteId(Long favoriteId)
    {
        return blMyFavoriteMapper.selectBlMyFavoriteByFavoriteId(favoriteId);
    }

    /**
     * 查询我的收藏列表
     * 
     * @param blMyFavorite 我的收藏
     * @return 我的收藏
     */
    @Override
    public List<BlMyFavorite> selectBlMyFavoriteList(BlMyFavorite blMyFavorite)
    {
        return blMyFavoriteMapper.selectBlMyFavoriteList(blMyFavorite);
    }

    /**
     * 新增我的收藏
     * 
     * @param blMyFavorite 我的收藏
     * @return 结果
     */
    @Override
    public int insertBlMyFavorite(BlMyFavorite blMyFavorite)
    {
        blMyFavorite.setCreateTime(new Date());
        blMyFavorite.setUpdateTime(new Date());
        return blMyFavoriteMapper.insertBlMyFavorite(blMyFavorite);
    }

    /**
     * 修改我的收藏
     * 
     * @param blMyFavorite 我的收藏
     * @return 结果
     */
    @Override
    public int updateBlMyFavorite(BlMyFavorite blMyFavorite)
    {
        blMyFavorite.setUpdateTime(new Date());
        return blMyFavoriteMapper.updateBlMyFavorite(blMyFavorite);
    }

    /**
     * 批量删除我的收藏
     * 
     * @param favoriteIds 需要删除的我的收藏主键
     * @return 结果
     */
    @Override
    public int deleteBlMyFavoriteByFavoriteIds(Long[] favoriteIds)
    {
        return blMyFavoriteMapper.deleteBlMyFavoriteByFavoriteIds(favoriteIds);
    }

    /**
     * 删除我的收藏信息
     * 
     * @param favoriteId 我的收藏主键
     * @return 结果
     */
    @Override
    public int deleteBlMyFavoriteByFavoriteId(Long favoriteId)
    {
        return blMyFavoriteMapper.deleteBlMyFavoriteByFavoriteId(favoriteId);
    }

    /**
     * 添加收藏
     * 
     * @param userId 用户ID
     * @param contentId 内容ID
     * @param contentType 内容类型
     * @param title 标题
     * @param desc 说明
     * @return 结果
     */
    @Override
    public int addFavorite(Long userId, Long contentId, Integer contentType, String title, String desc)
    {
        // 检查是否已经收藏
        BlMyFavorite existingFavorite = blMyFavoriteMapper.selectByUserIdAndContentId(userId, contentId, contentType);
        if (existingFavorite != null) {
            return 0; // 已经收藏过了
        }

        BlMyFavorite favorite = new BlMyFavorite();
        favorite.setUserId(userId);
        favorite.setContentId(contentId);
        favorite.setContentType(contentType);
        favorite.setTitle(title);
        favorite.setDesc(desc);
        favorite.setStatus("1"); // 1表示有效状态
        favorite.setCreateTime(new Date());
        favorite.setUpdateTime(new Date());

        return blMyFavoriteMapper.insertBlMyFavorite(favorite);
    }

    /**
     * 取消收藏
     * 
     * @param userId 用户ID
     * @param contentId 内容ID
     * @param contentType 内容类型
     * @return 结果
     */
    @Override
    public int cancelFavorite(Long userId, Long contentId, Integer contentType)
    {
        return blMyFavoriteMapper.deleteByUserIdAndContentId(userId, contentId, contentType);
    }

    /**
     * 检查是否已收藏
     * 
     * @param userId 用户ID
     * @param contentId 内容ID
     * @param contentType 内容类型
     * @return 是否已收藏
     */
    @Override
    public boolean isFavorited(Long userId, Long contentId, Integer contentType)
    {
        BlMyFavorite favorite = blMyFavoriteMapper.selectByUserIdAndContentId(userId, contentId, contentType);
        return favorite != null;
    }

    /**
     * 根据用户ID和内容类型查询收藏列表
     * 
     * @param userId 用户ID
     * @param contentType 内容类型
     * @return 收藏列表
     */
    @Override
    public List<BlMyFavorite> selectByUserIdAndContentType(Long userId, Integer contentType)
    {
        BlMyFavorite query = new BlMyFavorite();
        query.setUserId(userId);
        query.setContentType(contentType);
        return blMyFavoriteMapper.selectBlMyFavoriteList(query);
    }
} 